home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / kiss-0.11 / kiss-0 / kiss / src / dochgrp.c < prev    next >
C/C++ Source or Header  |  1995-03-23  |  1KB  |  46 lines

  1. #include "kiss.h"
  2.  
  3. int dochgrp (Stringstack s)
  4. {
  5.     struct group
  6.     *gp;
  7.     register int
  8.     ret = 0,
  9.     i,
  10.     gid;
  11.     struct stat
  12.     statbuf;
  13.     
  14.     if (getopt (s.nstr, s.str, "h") != -1 || s.nstr < 3)
  15.     error ("Bad commandline.\n"
  16.            "Usage: %s group-id file(s)\n"\
  17.            "Where:\n"
  18.            "    group-id: numerical ID or group name\n"
  19.            "    file(s): files to change group\n"
  20.            , progname);
  21.  
  22.     if (! isdigit (s.str [1][1]))
  23.     {
  24.     if (! (gp = getgrnam (s.str [1])) )
  25.         error ("no group with name \"%s\" in database", s.str [1]);
  26.     gid = gp->gr_gid;
  27.     }
  28.     else
  29.     {
  30.     gid = atoi (s.str [1]);
  31.     if (! (gp = getgrgid (gid)) )
  32.         error ("no group with number \"%d\" in database", gid);
  33.     }
  34.  
  35.     for (i = 2; i < s.nstr; i++)
  36.     {
  37.     if (stat (s.str [i], &statbuf))
  38.         ret += warning ("cannot stat \"%s\"", s.str [i]);
  39.     else if (chown (s.str [i], statbuf.st_uid, gid))
  40.         ret += warning ("problem changing group id to %d for file \"%s\"",
  41.                 gid, s.str [i]);
  42.     }
  43.  
  44.     return (ret);
  45. }
  46.